<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Convolution Functions</title>
<title>CMSIS-NN: Convolution Functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<script type="text/javascript" src="cmsis_footer.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 46px;">
  <td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">CMSIS-NN
   &#160;<span id="projectnumber">Version 3.1.0</span>
   </div>
   <div id="projectbrief">CMSIS NN Software Library</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
    <ul class="tablist">
      <script type="text/javascript">
		<!--
		writeComponentTabs.call(this);
		//-->
      </script>
	  </ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
      <li><a href="modules.html"><span>Reference</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__NNConv.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Convolution Functions<div class="ingroups"><a class="el" href="group__groupNN.html">Neural Network Functions</a></div></div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga5b85b56e06e563c05b08ad6ba7423e1d"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga5b85b56e06e563c05b08ad6ba7423e1d">arm_convolve_1_x_n_s8</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output_data)</td></tr>
<tr class="memdesc:ga5b85b56e06e563c05b08ad6ba7423e1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">1xn convolution  <a href="#ga5b85b56e06e563c05b08ad6ba7423e1d">More...</a><br/></td></tr>
<tr class="separator:ga5b85b56e06e563c05b08ad6ba7423e1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf87f133e81ee6c1fbde89fe44c35352e"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gaf87f133e81ee6c1fbde89fe44c35352e">arm_convolve_1_x_n_s8_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims)</td></tr>
<tr class="memdesc:gaf87f133e81ee6c1fbde89fe44c35352e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required additional buffer size for 1xn convolution.  <a href="#gaf87f133e81ee6c1fbde89fe44c35352e">More...</a><br/></td></tr>
<tr class="separator:gaf87f133e81ee6c1fbde89fe44c35352e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga110adcfdaab356c750c6270aa5e05f29"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga110adcfdaab356c750c6270aa5e05f29">arm_convolve_1x1_HWC_q7_fast_nonsquare</a> (const q7_t *Im_in, const uint16_t dim_im_in_x, const uint16_t dim_im_in_y, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel_x, const uint16_t dim_kernel_y, const uint16_t padding_x, const uint16_t padding_y, const uint16_t stride_x, const uint16_t stride_y, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out_x, const uint16_t dim_im_out_y, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga110adcfdaab356c750c6270aa5e05f29"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast Q7 version of 1x1 convolution (non-sqaure shape)  <a href="#ga110adcfdaab356c750c6270aa5e05f29">More...</a><br/></td></tr>
<tr class="separator:ga110adcfdaab356c750c6270aa5e05f29"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga53608c814d9b8a458f4d87f8f40051b7"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga53608c814d9b8a458f4d87f8f40051b7">arm_convolve_1x1_s8_fast</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output_data)</td></tr>
<tr class="memdesc:ga53608c814d9b8a458f4d87f8f40051b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast s8 version for 1x1 convolution (non-square shape)  <a href="#ga53608c814d9b8a458f4d87f8f40051b7">More...</a><br/></td></tr>
<tr class="separator:ga53608c814d9b8a458f4d87f8f40051b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf8bf3e2c2f8b4f2a0cbfb8a797a8b5a8"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gaf8bf3e2c2f8b4f2a0cbfb8a797a8b5a8">arm_convolve_1x1_s8_fast_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims)</td></tr>
<tr class="memdesc:gaf8bf3e2c2f8b4f2a0cbfb8a797a8b5a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required buffer size for arm_convolve_1x1_s8_fast.  <a href="#gaf8bf3e2c2f8b4f2a0cbfb8a797a8b5a8">More...</a><br/></td></tr>
<tr class="separator:gaf8bf3e2c2f8b4f2a0cbfb8a797a8b5a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadda1e5325d511d56716111548c787a1c"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gadda1e5325d511d56716111548c787a1c">arm_convolve_fast_s16</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q15_t *input_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int64_t *bias_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q15_t *output_data)</td></tr>
<tr class="memdesc:gadda1e5325d511d56716111548c787a1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Optimized s16 convolution function.  <a href="#gadda1e5325d511d56716111548c787a1c">More...</a><br/></td></tr>
<tr class="separator:gadda1e5325d511d56716111548c787a1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8db7c4be84de273cfba630106d912737"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga8db7c4be84de273cfba630106d912737">arm_convolve_fast_s16_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims)</td></tr>
<tr class="memdesc:ga8db7c4be84de273cfba630106d912737"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required buffer size for fast s16 convolution function.  <a href="#ga8db7c4be84de273cfba630106d912737">More...</a><br/></td></tr>
<tr class="separator:ga8db7c4be84de273cfba630106d912737"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga55701f213b198084b52eab53097f1f58"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga55701f213b198084b52eab53097f1f58">arm_convolve_HWC_q15_basic</a> (const q15_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const q15_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const q15_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q15_t *Im_out, const uint16_t dim_im_out, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga55701f213b198084b52eab53097f1f58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic Q15 convolution function.  <a href="#ga55701f213b198084b52eab53097f1f58">More...</a><br/></td></tr>
<tr class="separator:ga55701f213b198084b52eab53097f1f58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4efb1ccbbaa7dd936961989dcb443f50"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga4efb1ccbbaa7dd936961989dcb443f50">arm_convolve_HWC_q15_fast</a> (const q15_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const q15_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const q15_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q15_t *Im_out, const uint16_t dim_im_out, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga4efb1ccbbaa7dd936961989dcb443f50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast Q15 convolution function.  <a href="#ga4efb1ccbbaa7dd936961989dcb443f50">More...</a><br/></td></tr>
<tr class="separator:ga4efb1ccbbaa7dd936961989dcb443f50"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga614ec3b71eb96e29952ec3f09e7b9c3c"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga614ec3b71eb96e29952ec3f09e7b9c3c">arm_convolve_HWC_q15_fast_nonsquare</a> (const q15_t *Im_in, const uint16_t dim_im_in_x, const uint16_t dim_im_in_y, const uint16_t ch_im_in, const q15_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel_x, const uint16_t dim_kernel_y, const uint16_t padding_x, const uint16_t padding_y, const uint16_t stride_x, const uint16_t stride_y, const q15_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q15_t *Im_out, const uint16_t dim_im_out_x, const uint16_t dim_im_out_y, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga614ec3b71eb96e29952ec3f09e7b9c3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast Q15 convolution function (non-sqaure shape)  <a href="#ga614ec3b71eb96e29952ec3f09e7b9c3c">More...</a><br/></td></tr>
<tr class="separator:ga614ec3b71eb96e29952ec3f09e7b9c3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga210ae8d8fc1d12ee15b41f1fa6947681"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga210ae8d8fc1d12ee15b41f1fa6947681">arm_convolve_HWC_q7_basic</a> (const q7_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga210ae8d8fc1d12ee15b41f1fa6947681"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic Q7 convolution function.  <a href="#ga210ae8d8fc1d12ee15b41f1fa6947681">More...</a><br/></td></tr>
<tr class="separator:ga210ae8d8fc1d12ee15b41f1fa6947681"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4501fa22c0836002aa47ccc313dce252"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga4501fa22c0836002aa47ccc313dce252">arm_convolve_HWC_q7_basic_nonsquare</a> (const q7_t *Im_in, const uint16_t dim_im_in_x, const uint16_t dim_im_in_y, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel_x, const uint16_t dim_kernel_y, const uint16_t padding_x, const uint16_t padding_y, const uint16_t stride_x, const uint16_t stride_y, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out_x, const uint16_t dim_im_out_y, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga4501fa22c0836002aa47ccc313dce252"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic Q7 convolution function (non-sqaure shape)  <a href="#ga4501fa22c0836002aa47ccc313dce252">More...</a><br/></td></tr>
<tr class="separator:ga4501fa22c0836002aa47ccc313dce252"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae00d3c1285907d59657369fc98bcc83f"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gae00d3c1285907d59657369fc98bcc83f">arm_convolve_HWC_q7_fast</a> (const q7_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:gae00d3c1285907d59657369fc98bcc83f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast Q7 convolution function.  <a href="#gae00d3c1285907d59657369fc98bcc83f">More...</a><br/></td></tr>
<tr class="separator:gae00d3c1285907d59657369fc98bcc83f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabc6d6b991024e9e5c5cdbd7489de88ef"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gabc6d6b991024e9e5c5cdbd7489de88ef">arm_convolve_HWC_q7_fast_nonsquare</a> (const q7_t *Im_in, const uint16_t dim_im_in_x, const uint16_t dim_im_in_y, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel_x, const uint16_t dim_kernel_y, const uint16_t padding_x, const uint16_t padding_y, const uint16_t stride_x, const uint16_t stride_y, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out_x, const uint16_t dim_im_out_y, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:gabc6d6b991024e9e5c5cdbd7489de88ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast Q7 convolution function (non-sqaure shape)  <a href="#gabc6d6b991024e9e5c5cdbd7489de88ef">More...</a><br/></td></tr>
<tr class="separator:gabc6d6b991024e9e5c5cdbd7489de88ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga98f2ead67d7cbdf558b0cd8a3b8fc148"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga98f2ead67d7cbdf558b0cd8a3b8fc148">arm_convolve_HWC_q7_RGB</a> (const q7_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga98f2ead67d7cbdf558b0cd8a3b8fc148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Q7 convolution function for RGB image.  <a href="#ga98f2ead67d7cbdf558b0cd8a3b8fc148">More...</a><br/></td></tr>
<tr class="separator:ga98f2ead67d7cbdf558b0cd8a3b8fc148"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf3e58798b12fa230d6a6487887aa13bf"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gaf3e58798b12fa230d6a6487887aa13bf">arm_convolve_s16</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q15_t *input_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int64_t *bias_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q15_t *output_data)</td></tr>
<tr class="memdesc:gaf3e58798b12fa230d6a6487887aa13bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic s16 convolution function.  <a href="#gaf3e58798b12fa230d6a6487887aa13bf">More...</a><br/></td></tr>
<tr class="separator:gaf3e58798b12fa230d6a6487887aa13bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf8ee642967e4b1b05465621979de1baa"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gaf8ee642967e4b1b05465621979de1baa">arm_convolve_s16_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims)</td></tr>
<tr class="memdesc:gaf8ee642967e4b1b05465621979de1baa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required buffer size for s16 convolution function.  <a href="#gaf8ee642967e4b1b05465621979de1baa">More...</a><br/></td></tr>
<tr class="separator:gaf8ee642967e4b1b05465621979de1baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga34bb5c05805ca7d5ea9681fcad8a711d"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga34bb5c05805ca7d5ea9681fcad8a711d">arm_convolve_s8</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output_data)</td></tr>
<tr class="memdesc:ga34bb5c05805ca7d5ea9681fcad8a711d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic s8 convolution function.  <a href="#ga34bb5c05805ca7d5ea9681fcad8a711d">More...</a><br/></td></tr>
<tr class="separator:ga34bb5c05805ca7d5ea9681fcad8a711d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac057b0749e2a6828ae21f762f3fa0c85"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gac057b0749e2a6828ae21f762f3fa0c85">arm_convolve_s8_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims)</td></tr>
<tr class="memdesc:gac057b0749e2a6828ae21f762f3fa0c85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required buffer size for s8 convolution function.  <a href="#gac057b0749e2a6828ae21f762f3fa0c85">More...</a><br/></td></tr>
<tr class="separator:gac057b0749e2a6828ae21f762f3fa0c85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf1b719fadc837ba10c065fa0aa1d31fc"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gaf1b719fadc837ba10c065fa0aa1d31fc">arm_convolve_wrapper_s16</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q15_t *input_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int64_t *bias_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q15_t *output_data)</td></tr>
<tr class="memdesc:gaf1b719fadc837ba10c065fa0aa1d31fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">s16 convolution layer wrapper function with the main purpose to call the optimal kernel available in cmsis-nn to perform the convolution.  <a href="#gaf1b719fadc837ba10c065fa0aa1d31fc">More...</a><br/></td></tr>
<tr class="separator:gaf1b719fadc837ba10c065fa0aa1d31fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga818dfca6a26af7cc8abb91d43fb16930"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga818dfca6a26af7cc8abb91d43fb16930">arm_convolve_wrapper_s16_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims)</td></tr>
<tr class="memdesc:ga818dfca6a26af7cc8abb91d43fb16930"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required buffer size for arm_convolve_wrapper_s16.  <a href="#ga818dfca6a26af7cc8abb91d43fb16930">More...</a><br/></td></tr>
<tr class="separator:ga818dfca6a26af7cc8abb91d43fb16930"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5ac772a94937e1efdab145a2ab4c0927"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga5ac772a94937e1efdab145a2ab4c0927">arm_convolve_wrapper_s8</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias_data, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output_data)</td></tr>
<tr class="memdesc:ga5ac772a94937e1efdab145a2ab4c0927"><td class="mdescLeft">&#160;</td><td class="mdescRight">s8 convolution layer wrapper function with the main purpose to call the optimal kernel available in cmsis-nn to perform the convolution.  <a href="#ga5ac772a94937e1efdab145a2ab4c0927">More...</a><br/></td></tr>
<tr class="separator:ga5ac772a94937e1efdab145a2ab4c0927"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga60c117b646f95abeb9966eefc4a9da38"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga60c117b646f95abeb9966eefc4a9da38">arm_convolve_wrapper_s8_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *conv_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims)</td></tr>
<tr class="memdesc:ga60c117b646f95abeb9966eefc4a9da38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required buffer size for arm_convolve_wrapper_s8.  <a href="#ga60c117b646f95abeb9966eefc4a9da38">More...</a><br/></td></tr>
<tr class="separator:ga60c117b646f95abeb9966eefc4a9da38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga558337f134d84dac2c312c5175bd67de"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga558337f134d84dac2c312c5175bd67de">arm_depthwise_conv_3x3_s8</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *dw_conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *kernel, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output)</td></tr>
<tr class="memdesc:ga558337f134d84dac2c312c5175bd67de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Optimized s8 depthwise convolution function for 3x3 kernel size with some constraints on the input arguments(documented below). Refer <a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9" title="Basic s8 depthwise convolution function that doesn&#39;t have any constraints on the input dimensions...">arm_depthwise_conv_s8()</a> for function argument details.  <a href="#ga558337f134d84dac2c312c5175bd67de">More...</a><br/></td></tr>
<tr class="separator:ga558337f134d84dac2c312c5175bd67de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga43c4623c2553d09a59385aabe971d75d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga43c4623c2553d09a59385aabe971d75d">__attribute__</a> ((unused))</td></tr>
<tr class="separator:ga43c4623c2553d09a59385aabe971d75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadde7c225c29269334cd821ead685361d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gadde7c225c29269334cd821ead685361d">depthwise_conv_s16_generic_s16</a> (const int16_t *input, const uint16_t input_batches, const uint16_t input_x, const uint16_t input_y, const uint16_t input_ch, const int8_t *kernel, const uint16_t ch_mult, const uint16_t kernel_x, const uint16_t kernel_y, const uint16_t pad_x, const uint16_t pad_y, const uint16_t stride_x, const uint16_t stride_y, const int64_t *bias, int16_t *output, const int32_t *output_shift, const int32_t *output_mult, const uint16_t output_x, const uint16_t output_y, const int32_t output_activation_min, const int32_t output_activation_max, const uint16_t dilation_x, const uint16_t dilation_y)</td></tr>
<tr class="separator:gadde7c225c29269334cd821ead685361d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3e5c3370f6f70ac51d559a53290bb45d"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga3e5c3370f6f70ac51d559a53290bb45d">arm_depthwise_conv_s16</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *dw_conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q15_t *input, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *kernel, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int64_t *bias, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q15_t *output)</td></tr>
<tr class="memdesc:ga3e5c3370f6f70ac51d559a53290bb45d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic s16 depthwise convolution function that doesn't have any constraints on the input dimensions.  <a href="#ga3e5c3370f6f70ac51d559a53290bb45d">More...</a><br/></td></tr>
<tr class="separator:ga3e5c3370f6f70ac51d559a53290bb45d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga06d7783f6788faad5165fd0ae583bc59"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga06d7783f6788faad5165fd0ae583bc59">depthwise_conv_s8_mult_4</a> (const int8_t *input, const int32_t input_x, const int32_t input_y, const int32_t input_ch, const int8_t *kernel, const int32_t output_ch, const int32_t ch_mult, const int32_t kernel_x, const int32_t kernel_y, const int32_t pad_x, const int32_t pad_y, const int32_t stride_x, const int32_t stride_y, const int32_t *bias, int8_t *output, const int32_t *output_shift, const int32_t *output_mult, const int32_t output_x, const int32_t output_y, const int32_t output_offset, const int32_t input_offset, const int32_t output_activation_min, const int32_t output_activation_max)</td></tr>
<tr class="separator:ga06d7783f6788faad5165fd0ae583bc59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8a0fd229483032bfe41183843e17f8f6"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga8a0fd229483032bfe41183843e17f8f6">depthwise_conv_s8_generic</a> (const q7_t *input, const uint16_t input_batches, const uint16_t input_x, const uint16_t input_y, const uint16_t input_ch, const q7_t *kernel, const uint16_t output_ch, const uint16_t ch_mult, const uint16_t kernel_x, const uint16_t kernel_y, const uint16_t pad_x, const uint16_t pad_y, const uint16_t stride_x, const uint16_t stride_y, const int32_t *bias, q7_t *output, const int32_t *output_shift, const int32_t *output_mult, const uint16_t output_x, const uint16_t output_y, const int32_t output_offset, const int32_t input_offset, const int32_t output_activation_min, const int32_t output_activation_max, const uint16_t dilation_x, const uint16_t dilation_y)</td></tr>
<tr class="separator:ga8a0fd229483032bfe41183843e17f8f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad8a6832cf0c8a8862fc8cd9ec95f40a9"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9">arm_depthwise_conv_s8</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *dw_conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *kernel, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output)</td></tr>
<tr class="memdesc:gad8a6832cf0c8a8862fc8cd9ec95f40a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic s8 depthwise convolution function that doesn't have any constraints on the input dimensions.  <a href="#gad8a6832cf0c8a8862fc8cd9ec95f40a9">More...</a><br/></td></tr>
<tr class="separator:gad8a6832cf0c8a8862fc8cd9ec95f40a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab9dc832c407c0fe0f4d6fbb063e85e97"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gab9dc832c407c0fe0f4d6fbb063e85e97">arm_depthwise_conv_s8_opt</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *dw_conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *kernel, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output)</td></tr>
<tr class="memdesc:gab9dc832c407c0fe0f4d6fbb063e85e97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Optimized s8 depthwise convolution function with constraint that in_channel equals out_channel. Refer <a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9" title="Basic s8 depthwise convolution function that doesn&#39;t have any constraints on the input dimensions...">arm_depthwise_conv_s8()</a> for function argument details.  <a href="#gab9dc832c407c0fe0f4d6fbb063e85e97">More...</a><br/></td></tr>
<tr class="separator:gab9dc832c407c0fe0f4d6fbb063e85e97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0ee6e4c1a521657c35477ae0daf1c842"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga0ee6e4c1a521657c35477ae0daf1c842">arm_depthwise_conv_s8_opt_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims)</td></tr>
<tr class="memdesc:ga0ee6e4c1a521657c35477ae0daf1c842"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the required buffer size for optimized s8 depthwise convolution function with constraint that in_channel equals out_channel.  <a href="#ga0ee6e4c1a521657c35477ae0daf1c842">More...</a><br/></td></tr>
<tr class="separator:ga0ee6e4c1a521657c35477ae0daf1c842"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4c54b5bdb38fc20c2167bdfa289f1a2b"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga4c54b5bdb38fc20c2167bdfa289f1a2b">depthwise_conv_u8_mult_4</a> (const uint8_t *input, const int32_t input_x, const int32_t input_y, const int32_t input_ch, const uint8_t *kernel, const int32_t output_ch, const int32_t ch_mult, const int32_t kernel_x, const int32_t kernel_y, const int32_t pad_x, const int32_t pad_y, const int32_t stride_x, const int32_t stride_y, const int32_t *bias, uint8_t *output, const int32_t output_shift, const int32_t output_mult, const int32_t output_x, const int32_t output_y, const int32_t output_offset, const int32_t input_offset, const int32_t filter_offset, const int32_t output_activation_min, const int32_t output_activation_max)</td></tr>
<tr class="separator:ga4c54b5bdb38fc20c2167bdfa289f1a2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab98fd934700dff7667131744c8972d91"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gab98fd934700dff7667131744c8972d91">depthwise_conv_u8_generic</a> (const uint8_t *input, const int32_t input_x, const int32_t input_y, const int32_t input_ch, const uint8_t *kernel, const int32_t output_ch, const int32_t ch_mult, const int32_t kernel_x, const int32_t kernel_y, const int32_t pad_x, const int32_t pad_y, const int32_t stride_x, const int32_t stride_y, const int32_t *bias, uint8_t *output, const int32_t output_shift, const int32_t output_mult, const int32_t output_x, const int32_t output_y, const int32_t output_offset, const int32_t input_offset, const int32_t filter_offset, const int32_t output_activation_min, const int32_t output_activation_max)</td></tr>
<tr class="separator:gab98fd934700dff7667131744c8972d91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga064686bdb2a6e52110b302255dad6009"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga064686bdb2a6e52110b302255dad6009">arm_depthwise_conv_u8_basic_ver1</a> (const uint8_t *input, const uint16_t input_x, const uint16_t input_y, const uint16_t input_ch, const uint8_t *kernel, const uint16_t kernel_x, const uint16_t kernel_y, const int16_t ch_mult, const int16_t pad_x, const int16_t pad_y, const int16_t stride_x, const int16_t stride_y, const int16_t dilation_x, const int16_t dilation_y, const int32_t *bias, const int32_t input_offset, const int32_t filter_offset, const int32_t output_offset, uint8_t *output, const uint16_t output_x, const uint16_t output_y, const int32_t output_activation_min, const int32_t output_activation_max, const int32_t output_shift, const int32_t output_mult)</td></tr>
<tr class="memdesc:ga064686bdb2a6e52110b302255dad6009"><td class="mdescLeft">&#160;</td><td class="mdescRight">uint8 depthwise convolution function with asymmetric quantization  <a href="#ga064686bdb2a6e52110b302255dad6009">More...</a><br/></td></tr>
<tr class="separator:ga064686bdb2a6e52110b302255dad6009"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabca128df92f9486ebdac7eee3178c0fd"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gabca128df92f9486ebdac7eee3178c0fd">arm_depthwise_conv_wrapper_s8</a> (const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *ctx, const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *dw_conv_params, const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *quant_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const q7_t *input, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const q7_t *filter, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *bias_dims, const int32_t *bias, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims, q7_t *output)</td></tr>
<tr class="memdesc:gabca128df92f9486ebdac7eee3178c0fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper function to pick the right optimized s8 depthwise convolution function.  <a href="#gabca128df92f9486ebdac7eee3178c0fd">More...</a><br/></td></tr>
<tr class="separator:gabca128df92f9486ebdac7eee3178c0fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga100b66e41b8fdf1eeb0c108bca6b6deb"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga100b66e41b8fdf1eeb0c108bca6b6deb">arm_depthwise_conv_wrapper_s8_get_buffer_size</a> (const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *dw_conv_params, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *input_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *filter_dims, const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *output_dims)</td></tr>
<tr class="memdesc:ga100b66e41b8fdf1eeb0c108bca6b6deb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get size of additional buffer required by <a class="el" href="group__NNConv.html#gabca128df92f9486ebdac7eee3178c0fd" title="Wrapper function to pick the right optimized s8 depthwise convolution function. ">arm_depthwise_conv_wrapper_s8()</a>  <a href="#ga100b66e41b8fdf1eeb0c108bca6b6deb">More...</a><br/></td></tr>
<tr class="separator:ga100b66e41b8fdf1eeb0c108bca6b6deb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad3d21b3bc6dbd6f3b97d01104349cb0a"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#gad3d21b3bc6dbd6f3b97d01104349cb0a">arm_depthwise_separable_conv_HWC_q7</a> (const q7_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:gad3d21b3bc6dbd6f3b97d01104349cb0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Q7 depthwise separable convolution function.  <a href="#gad3d21b3bc6dbd6f3b97d01104349cb0a">More...</a><br/></td></tr>
<tr class="separator:gad3d21b3bc6dbd6f3b97d01104349cb0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga32ac508c5467813a84f74f96655dc697"><td class="memItemLeft" align="right" valign="top">arm_status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__NNConv.html#ga32ac508c5467813a84f74f96655dc697">arm_depthwise_separable_conv_HWC_q7_nonsquare</a> (const q7_t *Im_in, const uint16_t dim_im_in_x, const uint16_t dim_im_in_y, const uint16_t ch_im_in, const q7_t *wt, const uint16_t ch_im_out, const uint16_t dim_kernel_x, const uint16_t dim_kernel_y, const uint16_t padding_x, const uint16_t padding_y, const uint16_t stride_x, const uint16_t stride_y, const q7_t *bias, const uint16_t bias_shift, const uint16_t out_shift, q7_t *Im_out, const uint16_t dim_im_out_x, const uint16_t dim_im_out_y, q15_t *bufferA, q7_t *bufferB)</td></tr>
<tr class="memdesc:ga32ac508c5467813a84f74f96655dc697"><td class="mdescLeft">&#160;</td><td class="mdescRight">Q7 depthwise separable convolution function (non-square shape)  <a href="#ga32ac508c5467813a84f74f96655dc697">More...</a><br/></td></tr>
<tr class="separator:ga32ac508c5467813a84f74f96655dc697"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Description</h2>
<p>Collection of convolution, depthwise convolution functions and their variants.</p>
<p>The convolution is implemented in 2 steps: im2col and GEMM</p>
<p>im2col is a process of converting each patch of image data into a column. After im2col, the convolution is computed as matrix-matrix multiplication.</p>
<p>To reduce the memory footprint, the im2col is performed partially. Each iteration, only a few column (i.e., patches) are generated and computed with GEMM kernels similar to CMSIS-DSP arm_mat_mult functions. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga43c4623c2553d09a59385aabe971d75d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void __attribute__ </td>
          <td>(</td>
          <td class="paramtype">(unused)&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#aa03e369b608572b80a4e56e8298a21c0">arm_nn_requantize_s64()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a19343832dbe881d527496171f69dc0c3">REDUCE_MULTIPLIER</a>.</p>

</div>
</div>
<a class="anchor" id="ga5b85b56e06e563c05b08ad6ba7423e1d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_1_x_n_s8 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context that contains the additional buffer if required by the function. arm_convolve_1_x_n_s8_get_buffer_size will return the buffer_size if required </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). Range of conv_params-&gt;input_offset : [-127, 128] Range of conv_params-&gt;output_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, 1, WK, C_IN] where WK is the horizontal spatial filter dimension </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Optional bias data pointer. Data type: int32 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int8</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> if argument constraints fail. or, <code>ARM_MATH_SUCCESS</code> on successful completion.</dd></dl>
<ul>
<li>Supported framework : TensorFlow Lite Micro</li>
<li>The following constrains on the arguments apply<ol type="1">
<li>input_dims-&gt;n equals 1</li>
<li>ouput_dims-&gt;w is a multiple of 4</li>
<li>Explicit constraints(since it is for 1xN convolution) -## input_dims-&gt;h equals 1 -## output_dims-&gt;h equals 1 -## filter_dims-&gt;h equals 1 <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000001">Todo:</a></b></dt><dd>Remove constraint on output_dims-&gt;w to make the function generic.</dd></dl>
</li>
</ol>
</li>
</ul>

<p>References <a class="el" href="structcmsis__nn__conv__params.html#a37811f827c8b46689a0627b54043650c">cmsis_nn_conv_params::activation</a>, <a class="el" href="group__NNConv.html#ga34bb5c05805ca7d5ea9681fcad8a711d">arm_convolve_s8()</a>, <a class="el" href="group__NNBasicMath.html#ga5224f2f155a59498c97f4d62ae726ea5">arm_nn_mat_mul_core_1x_s8()</a>, <a class="el" href="group__NNBasicMath.html#ga356c6870ac897816c016e7b77a3b767a">arm_nn_mat_mul_core_4x_s8()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__conv__params.html#ac284274c0aa03b1a0bcc0a93b275eadd">cmsis_nn_conv_params::input_offset</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__conv__params.html#aa917be27492df19f6382df8d1d78870a">cmsis_nn_conv_params::output_offset</a>, <a class="el" href="structcmsis__nn__conv__params.html#a0dd7826503a39d346ab260fa042ea525">cmsis_nn_conv_params::padding</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__conv__params.html#a9ccfc682bff157a5e951b2ffba6d672c">cmsis_nn_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga5ac772a94937e1efdab145a2ab4c0927">arm_convolve_wrapper_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="gaf87f133e81ee6c1fbde89fe44c35352e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_convolve_1_x_n_s8_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, 1, WK, C_IN] where WK is the horizontal spatial filter dimension </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns required buffer size(bytes) </dd></dl>

<p>References <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga60c117b646f95abeb9966eefc4a9da38">arm_convolve_wrapper_s8_get_buffer_size()</a>.</p>

</div>
</div>
<a class="anchor" id="ga110adcfdaab356c750c6270aa5e05f29"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_1x1_HWC_q7_fast_nonsquare </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_x</td><td>input tensor dimention x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_y</td><td>input tensor dimention y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_x</td><td>filter kernel size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_y</td><td>filter kernel size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_x</td><td>padding size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_y</td><td>padding size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_x</td><td>convolution stride x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_y</td><td>convolution stride y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_x</td><td>output tensor dimension x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_y</td><td>output tensor dimension y </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p>This function is optimized for convolution with 1x1 kernel size (i.e., dim_kernel_x=1 and dim_kernel_y=1). It can be used for the second half of MobileNets [1] after depthwise separable convolution.</p>
<p>This function is the version with full list of optimization tricks, but with some constraints: ch_im_in is multiple of 4 ch_im_out is multiple of 2</p>
<p>[1] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications <a href="https://arxiv.org/abs/1704.04861">https://arxiv.org/abs/1704.04861</a> </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#aefe9c7ce9a65060a244b06dffe74c4b3">arm_nn_mat_mult_kernel_q7_q15_reordered()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="group__nndata__convert.html#gaba8fd446d5f54760b406ee63b25d1aee">arm_q7_to_q15_reordered_no_shift()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="ga53608c814d9b8a458f4d87f8f40051b7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_1x1_s8_fast </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context that contains the additional buffer if required by the function. arm_convolve_1x1_s8_fast_get_buffer_size will return the buffer_size if required </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). Range of conv_params-&gt;input_offset : [-127, 128] Range of conv_params-&gt;output_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, 1, 1, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Optional bias data pointer. Data type: int32 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int8</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> if argument constraints fail. or, <code>ARM_MATH_SUCCESS</code> on successful completion.</dd></dl>
<ul>
<li>Supported framework : TensorFlow Lite Micro</li>
<li>The following constrains on the arguments apply<ol type="1">
<li>input_dims-&gt;c is a multiple of 4</li>
<li>conv_params-&gt;padding.w = conv_params-&gt;padding.h = 0</li>
<li>conv_params-&gt;stride.w = conv_params-&gt;stride.h = 1 </li>
</ol>
</li>
</ul>

<p>References <a class="el" href="structcmsis__nn__conv__params.html#a37811f827c8b46689a0627b54043650c">cmsis_nn_conv_params::activation</a>, <a class="el" href="group__NNBasicMath.html#ga5224f2f155a59498c97f4d62ae726ea5">arm_nn_mat_mul_core_1x_s8()</a>, <a class="el" href="group__NNBasicMath.html#ga356c6870ac897816c016e7b77a3b767a">arm_nn_mat_mul_core_4x_s8()</a>, <a class="el" href="group__NNBasicMath.html#ga360cdaa16c399e3bfbeaaa7296c326e1">arm_nn_mat_mult_nt_t_s8()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__conv__params.html#ac284274c0aa03b1a0bcc0a93b275eadd">cmsis_nn_conv_params::input_offset</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__conv__params.html#aa917be27492df19f6382df8d1d78870a">cmsis_nn_conv_params::output_offset</a>, <a class="el" href="structcmsis__nn__conv__params.html#a0dd7826503a39d346ab260fa042ea525">cmsis_nn_conv_params::padding</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__conv__params.html#a9ccfc682bff157a5e951b2ffba6d672c">cmsis_nn_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga5ac772a94937e1efdab145a2ab4c0927">arm_convolve_wrapper_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="gaf8bf3e2c2f8b4f2a0cbfb8a797a8b5a8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_convolve_1x1_s8_fast_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) dimensions </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns the required buffer size in bytes </dd></dl>

<p>Referenced by <a class="el" href="group__NNConv.html#ga60c117b646f95abeb9966eefc4a9da38">arm_convolve_wrapper_s8_get_buffer_size()</a>.</p>

</div>
</div>
<a class="anchor" id="gadda1e5325d511d56716111548c787a1c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_fast_s16 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int64_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context that contains the additional buffer if required by the function. arm_convolve_fast_s16_get_buffer_size will return the buffer_size if required </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). conv_params-&gt;input_offset : Not used conv_params-&gt;output_offset : Not used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int16 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions. (filter_dims-&gt;w * filter_dims-&gt;h * input_dims-&gt;c) must not exceed 512 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Optional bias data pointer. Data type: int64 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int16</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code></dd></dl>
<pre class="fragment"> 1. Supported framework: TensorFlow Lite micro
 2. q7/q15 is used as data type eventhough it is s8/s16 data. It is done so to be consistent with existing APIs.
 3. Additional memory is required for optimization. Refer to argument 'ctx' for details.
 4. Implementation supports kernel volumes (filter width * filter height * input channels) &lt; 512.</pre> 
<p>References <a class="el" href="structcmsis__nn__conv__params.html#a37811f827c8b46689a0627b54043650c">cmsis_nn_conv_params::activation</a>, <a class="el" href="group__NNConv.html#gac057b0749e2a6828ae21f762f3fa0c85">arm_convolve_s8_get_buffer_size()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a085459f6280c8f586ddd64998dece532">arm_memcpy_q7()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a7018797f0abd9595cc0dc0aedbb5f17e">arm_memset_q7()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a674055a9eeb7299669c8c4b6532de342">arm_nn_mat_mult_kernel_s16()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#aa03e369b608572b80a4e56e8298a21c0">arm_nn_requantize_s64()</a>, <a class="el" href="structcmsis__nn__context.html#a3e613ad30f12df59853a1b3565212702">cmsis_nn_context::buf</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__conv__params.html#a0dd7826503a39d346ab260fa042ea525">cmsis_nn_conv_params::padding</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a19343832dbe881d527496171f69dc0c3">REDUCE_MULTIPLIER</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__conv__params.html#a9ccfc682bff157a5e951b2ffba6d672c">cmsis_nn_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gaf1b719fadc837ba10c065fa0aa1d31fc">arm_convolve_wrapper_s16()</a>.</p>

</div>
</div>
<a class="anchor" id="ga8db7c4be84de273cfba630106d912737"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_convolve_fast_s16_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns required buffer size(bytes) </dd></dl>

<p>References <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga818dfca6a26af7cc8abb91d43fb16930">arm_convolve_wrapper_s16_get_buffer_size()</a>.</p>

</div>
</div>
<a class="anchor" id="ga55701f213b198084b52eab53097f1f58"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q15_basic </td>
          <td>(</td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in</td><td>input tensor dimention </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel</td><td>filter kernel size </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding</td><td>padding sizes </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>convolution stride </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out</td><td>output tensor dimension </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code></dd></dl>
<p><b>Buffer size:</b></p>
<p>bufferA size: ch_im_in*dim_kernel*dim_kernel</p>
<p>bufferB size: 0</p>
<p>This basic version is designed to work for any input tensor and weight dimension. </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="ga4efb1ccbbaa7dd936961989dcb443f50"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q15_fast </td>
          <td>(</td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in</td><td>input tensor dimention </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel</td><td>filter kernel size </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding</td><td>padding sizes </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>convolution stride </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out</td><td>output tensor dimension </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p><b>Buffer size:</b></p>
<p>bufferA size: 2*ch_im_in*dim_kernel*dim_kernel</p>
<p>bufferB size: 0</p>
<p><b>Input dimension constraints:</b></p>
<p>ch_im_in is multiple of 2</p>
<p>ch_im_out is multiple of 2</p>
<p>dim_im_out is a multiple of 2 </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="ga614ec3b71eb96e29952ec3f09e7b9c3c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q15_fast_nonsquare </td>
          <td>(</td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_x</td><td>input tensor dimention x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_y</td><td>input tensor dimention y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_x</td><td>filter kernel size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_y</td><td>filter kernel size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_x</td><td>padding size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_y</td><td>padding size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_x</td><td>convolution stride x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_y</td><td>convolution stride y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_x</td><td>output tensor dimension x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_y</td><td>output tensor dimension y </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p><b>Buffer size:</b></p>
<p>bufferA size: 2*ch_im_in*dim_kernel*dim_kernel</p>
<p>bufferB size: 0</p>
<p><b>Input dimension constraints:</b></p>
<p>ch_im_in is multiple of 2</p>
<p>ch_im_out is multiple of 2 </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="ga210ae8d8fc1d12ee15b41f1fa6947681"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q7_basic </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in</td><td>input tensor dimention </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel</td><td>filter kernel size </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding</td><td>padding sizes </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>convolution stride </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out</td><td>output tensor dimension </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code></dd></dl>
<p><b>Buffer size:</b></p>
<p>bufferA size: 2*ch_im_in*dim_kernel*dim_kernel</p>
<p>bufferB size: 0</p>
<p>This basic version is designed to work for any input tensor and weight dimension. </p>

<p>References <a class="el" href="arm__nnfunctions_8h.html#abc4fb258cfe8500ee68e812a293a80a3">arm_nn_mat_mult_kernel_q7_q15()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="group__nndata__convert.html#gae349de4dba8d253c89d45794ccf05680">arm_q7_to_q15_no_shift()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="ga4501fa22c0836002aa47ccc313dce252"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q7_basic_nonsquare </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Basic Q7 convolution function (non-square shape)</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_x</td><td>input tensor dimention x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_y</td><td>input tensor dimention y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_x</td><td>filter kernel size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_y</td><td>filter kernel size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_x</td><td>padding size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_y</td><td>padding size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_x</td><td>convolution stride x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_y</td><td>convolution stride y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_x</td><td>output tensor dimension x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_y</td><td>output tensor dimension y </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code> </dd></dl>

<p>References <a class="el" href="arm__nnfunctions_8h.html#abc4fb258cfe8500ee68e812a293a80a3">arm_nn_mat_mult_kernel_q7_q15()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="group__nndata__convert.html#gae349de4dba8d253c89d45794ccf05680">arm_q7_to_q15_no_shift()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="gae00d3c1285907d59657369fc98bcc83f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q7_fast </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in</td><td>input tensor dimention </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel</td><td>filter kernel size </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding</td><td>padding sizes </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>convolution stride </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out</td><td>output tensor dimension </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p><b>Buffer size:</b></p>
<p>bufferA size: 2*ch_im_in*dim_kernel*dim_kernel</p>
<p>bufferB size: 0</p>
<p><b>Input dimension constraints:</b></p>
<p>ch_im_in is multiple of 4 ( because of the SIMD32 read and swap )</p>
<p>ch_im_out is multiple of 2 ( bacause 2x2 mat_mult kernel )</p>
<p>The im2col converts the Q7 tensor input into Q15 column, which is stored in bufferA. There is reordering happenning during this im2col process with arm_q7_to_q15_reordered_no_shift. For every four elements, the second and third elements are swapped.</p>
<p>The computation kernel arm_nn_mat_mult_kernel_q7_q15_reordered does the GEMM computation with the reordered columns.</p>
<p>To speed-up the determination of the padding condition, we split the computation into 3x3 parts, i.e., {top, mid, bottom} X {left, mid, right}. This reduces the total number of boundary condition checks and improves the data copying performance. </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#aefe9c7ce9a65060a244b06dffe74c4b3">arm_nn_mat_mult_kernel_q7_q15_reordered()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="group__nndata__convert.html#gaba8fd446d5f54760b406ee63b25d1aee">arm_q7_to_q15_reordered_no_shift()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="gabc6d6b991024e9e5c5cdbd7489de88ef"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q7_fast_nonsquare </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_x</td><td>input tensor dimention x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_y</td><td>input tensor dimention y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_x</td><td>filter kernel size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_y</td><td>filter kernel size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_x</td><td>padding size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_y</td><td>padding size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_x</td><td>convolution stride x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_y</td><td>convolution stride y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_x</td><td>output tensor dimension x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_y</td><td>output tensor dimension y </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p>This function is the version with full list of optimization tricks, but with some constraints: ch_im_in is multiple of 4 ch_im_out is multiple of 2 </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#aefe9c7ce9a65060a244b06dffe74c4b3">arm_nn_mat_mult_kernel_q7_q15_reordered()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="group__nndata__convert.html#gaba8fd446d5f54760b406ee63b25d1aee">arm_q7_to_q15_reordered_no_shift()</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>.</p>

</div>
</div>
<a class="anchor" id="ga98f2ead67d7cbdf558b0cd8a3b8fc148"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_HWC_q7_RGB </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Q7 version of convolution for RGB image.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in</td><td>input tensor dimention </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel</td><td>filter kernel size </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding</td><td>padding sizes </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>convolution stride </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out</td><td>output tensor dimension </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p><b>Buffer size:</b></p>
<p>bufferA size: 2*ch_im_in*dim_kernel*dim_kernel</p>
<p>bufferB size: 0</p>
<p><b>Input dimension constraints:</b></p>
<p>ch_im_in equals 3</p>
<p>This kernel is written exclusively for convolution with ch_im_in equals 3. This applies on the first layer of CNNs which has input image with RGB format. </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#a085459f6280c8f586ddd64998dece532">arm_memcpy_q7()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a7018797f0abd9595cc0dc0aedbb5f17e">arm_memset_q7()</a>, <a class="el" href="arm__nnfunctions_8h.html#abc4fb258cfe8500ee68e812a293a80a3">arm_nn_mat_mult_kernel_q7_q15()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a31fa46f17212fbcb65d2cdae06fc08f5">arm_nn_read_q7x4()</a>, <a class="el" href="unionarm__nnword.html#a9b5e49e4e2c4b7203e07b305386bb2ba">arm_nnword::half_words</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>, and <a class="el" href="unionarm__nnword.html#a35c7b2ae25e35e0ddcd9ec0a1a6f8d18">arm_nnword::word</a>.</p>

</div>
</div>
<a class="anchor" id="gaf3e58798b12fa230d6a6487887aa13bf"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_s16 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int64_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context that contains the additional buffer if required by the function. arm_convolve_s16_get_buffer_size will return the buffer_size if required </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). conv_params-&gt;input_offset : Not used conv_params-&gt;output_offset : Not used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int16 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Optional bias data pointer. Data type: int64 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int16</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code></dd></dl>
<ol type="1">
<li>Supported framework: TensorFlow Lite micro</li>
<li>q7/q15 is used as data type eventhough it is s8/s16 data. It is done so to be consistent with existing APIs.</li>
<li>Additional memory is required for optimization. Refer to argument 'ctx' for details. </li>
</ol>

<p>References <a class="el" href="structcmsis__nn__conv__params.html#a37811f827c8b46689a0627b54043650c">cmsis_nn_conv_params::activation</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#aa03e369b608572b80a4e56e8298a21c0">arm_nn_requantize_s64()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__conv__params.html#a2b324f59f5ac0ec98f885a1a28514e75">cmsis_nn_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__conv__params.html#a0dd7826503a39d346ab260fa042ea525">cmsis_nn_conv_params::padding</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a19343832dbe881d527496171f69dc0c3">REDUCE_MULTIPLIER</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__conv__params.html#a9ccfc682bff157a5e951b2ffba6d672c">cmsis_nn_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gaf1b719fadc837ba10c065fa0aa1d31fc">arm_convolve_wrapper_s16()</a>.</p>

</div>
</div>
<a class="anchor" id="gaf8ee642967e4b1b05465621979de1baa"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_convolve_s16_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns required buffer size(bytes) </dd></dl>

<p>Referenced by <a class="el" href="group__NNConv.html#ga818dfca6a26af7cc8abb91d43fb16930">arm_convolve_wrapper_s16_get_buffer_size()</a>.</p>

</div>
</div>
<a class="anchor" id="ga34bb5c05805ca7d5ea9681fcad8a711d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_s8 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context that contains the additional buffer if required by the function. arm_convolve_s8_get_buffer_size will return the buffer_size if required </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). Range of conv_params-&gt;input_offset : [-127, 128] Range of conv_params-&gt;output_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Optional bias data pointer. Data type: int32 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int8</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code></dd></dl>
<ol type="1">
<li>Supported framework: TensorFlow Lite micro</li>
<li>q7 is used as data type eventhough it is s8 data. It is done so to be consistent with existing APIs.</li>
<li>Additional memory is required for optimization. Refer to argument 'ctx' for details. </li>
</ol>

<p>References <a class="el" href="structcmsis__nn__conv__params.html#a37811f827c8b46689a0627b54043650c">cmsis_nn_conv_params::activation</a>, <a class="el" href="group__NNConv.html#gac057b0749e2a6828ae21f762f3fa0c85">arm_convolve_s8_get_buffer_size()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a085459f6280c8f586ddd64998dece532">arm_memcpy_q7()</a>, <a class="el" href="group__NNBasicMath.html#ga356c6870ac897816c016e7b77a3b767a">arm_nn_mat_mul_core_4x_s8()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a2da69a593037381cd149616f2fd57cce">arm_nn_mat_mult_kernel_s8_s16()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#aaf7a3da870f2c5e86cdef0d3975e3d69">arm_nn_mat_mult_s8()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#afdda94a339b76615d3161e9fc63f4d21">arm_nn_read_q15x2_ia()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="group__nndata__convert.html#gab2d48529ae05b350a015f8f1e6596a31">arm_q7_to_q15_with_offset()</a>, <a class="el" href="structcmsis__nn__context.html#a3e613ad30f12df59853a1b3565212702">cmsis_nn_context::buf</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__conv__params.html#a2b324f59f5ac0ec98f885a1a28514e75">cmsis_nn_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__conv__params.html#ac284274c0aa03b1a0bcc0a93b275eadd">cmsis_nn_conv_params::input_offset</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__conv__params.html#aa917be27492df19f6382df8d1d78870a">cmsis_nn_conv_params::output_offset</a>, <a class="el" href="structcmsis__nn__conv__params.html#a0dd7826503a39d346ab260fa042ea525">cmsis_nn_conv_params::padding</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__conv__params.html#a9ccfc682bff157a5e951b2ffba6d672c">cmsis_nn_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga5b85b56e06e563c05b08ad6ba7423e1d">arm_convolve_1_x_n_s8()</a>, and <a class="el" href="group__NNConv.html#ga5ac772a94937e1efdab145a2ab4c0927">arm_convolve_wrapper_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="gac057b0749e2a6828ae21f762f3fa0c85"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_convolve_s8_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns required buffer size(bytes) </dd></dl>

<p>References <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gadda1e5325d511d56716111548c787a1c">arm_convolve_fast_s16()</a>, <a class="el" href="group__NNConv.html#ga34bb5c05805ca7d5ea9681fcad8a711d">arm_convolve_s8()</a>, and <a class="el" href="group__NNConv.html#ga60c117b646f95abeb9966eefc4a9da38">arm_convolve_wrapper_s8_get_buffer_size()</a>.</p>

</div>
</div>
<a class="anchor" id="gaf1b719fadc837ba10c065fa0aa1d31fc"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_wrapper_s16 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int64_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context that contains the additional buffer if required by the function. arm_convolve_wrapper_s8_get_buffer_size will return the buffer_size if required </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). conv_params-&gt;input_offset : Not used conv_params-&gt;output_offset : Not used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int16 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Bias data pointer. Data type: int64 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int16</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> if argument constraints fail. or, <code>ARM_MATH_SUCCESS</code> on successful completion. </dd></dl>

<p>References <a class="el" href="group__NNConv.html#gadda1e5325d511d56716111548c787a1c">arm_convolve_fast_s16()</a>, <a class="el" href="group__NNConv.html#gaf3e58798b12fa230d6a6487887aa13bf">arm_convolve_s16()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__conv__params.html#a2b324f59f5ac0ec98f885a1a28514e75">cmsis_nn_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

</div>
</div>
<a class="anchor" id="ga818dfca6a26af7cc8abb91d43fb16930"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_convolve_wrapper_s16_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). conv_params-&gt;input_offset : Not used conv_params-&gt;output_offset : Not used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns required buffer size(bytes) </dd></dl>

<p>References <a class="el" href="group__NNConv.html#ga8db7c4be84de273cfba630106d912737">arm_convolve_fast_s16_get_buffer_size()</a>, <a class="el" href="group__NNConv.html#gaf8ee642967e4b1b05465621979de1baa">arm_convolve_s16_get_buffer_size()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__conv__params.html#a2b324f59f5ac0ec98f885a1a28514e75">cmsis_nn_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

</div>
</div>
<a class="anchor" id="ga5ac772a94937e1efdab145a2ab4c0927"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_convolve_wrapper_s8 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context that contains the additional buffer if required by the function. arm_convolve_wrapper_s8_get_buffer_size will return the buffer_size if required </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). Range of conv_params-&gt;input_offset : [-127, 128] Range of conv_params-&gt;output_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Bias data pointer. Data type: int32 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int8</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> if argument constraints fail. or, <code>ARM_MATH_SUCCESS</code> on successful completion. </dd></dl>

<p>References <a class="el" href="group__NNConv.html#ga5b85b56e06e563c05b08ad6ba7423e1d">arm_convolve_1_x_n_s8()</a>, <a class="el" href="group__NNConv.html#ga53608c814d9b8a458f4d87f8f40051b7">arm_convolve_1x1_s8_fast()</a>, <a class="el" href="group__NNConv.html#ga34bb5c05805ca7d5ea9681fcad8a711d">arm_convolve_s8()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__conv__params.html#a2b324f59f5ac0ec98f885a1a28514e75">cmsis_nn_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__conv__params.html#a0dd7826503a39d346ab260fa042ea525">cmsis_nn_conv_params::padding</a>, <a class="el" href="structcmsis__nn__conv__params.html#a9ccfc682bff157a5e951b2ffba6d672c">cmsis_nn_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

</div>
</div>
<a class="anchor" id="ga60c117b646f95abeb9966eefc4a9da38"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_convolve_wrapper_s8_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__conv__params.html">cmsis_nn_conv_params</a> *&#160;</td>
          <td class="paramname"><em>conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">conv_params</td><td>Convolution parameters (e.g. strides, dilations, pads,...). Range of conv_params-&gt;input_offset : [-127, 128] Range of conv_params-&gt;output_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) dimensions. Format: [N, H, W, C_IN] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter dimensions. Format: [C_OUT, HK, WK, C_IN] where HK and WK are the spatial filter dimensions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns required buffer size(bytes) </dd></dl>

<p>References <a class="el" href="group__NNConv.html#gaf87f133e81ee6c1fbde89fe44c35352e">arm_convolve_1_x_n_s8_get_buffer_size()</a>, <a class="el" href="group__NNConv.html#gaf8bf3e2c2f8b4f2a0cbfb8a797a8b5a8">arm_convolve_1x1_s8_fast_get_buffer_size()</a>, <a class="el" href="group__NNConv.html#gac057b0749e2a6828ae21f762f3fa0c85">arm_convolve_s8_get_buffer_size()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__conv__params.html#a2b324f59f5ac0ec98f885a1a28514e75">cmsis_nn_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__conv__params.html#a0dd7826503a39d346ab260fa042ea525">cmsis_nn_conv_params::padding</a>, <a class="el" href="structcmsis__nn__conv__params.html#a9ccfc682bff157a5e951b2ffba6d672c">cmsis_nn_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

</div>
</div>
<a class="anchor" id="ga558337f134d84dac2c312c5175bd67de"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_conv_3x3_s8 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *&#160;</td>
          <td class="paramname"><em>dw_conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>The function returns one of the following <code>ARM_MATH_SIZE_MISMATCH</code> - Unsupported dimension of tensors <code>ARM_MATH_ARGUMENT_ERROR</code> - Unsupported pad size along the x axis <code>ARM_MATH_SUCCESS</code> - Successful operation</dd></dl>
<ul>
<li>Supported framework : TensorFlow Lite Micro</li>
<li>The following constrains on the arguments apply<ol type="1">
<li>Number of input channel equals number of output channels</li>
<li>Filter height and width equals 3</li>
<li>Padding along x is either 0 or 1. </li>
</ol>
</li>
</ul>

<p>References <a class="el" href="structcmsis__nn__dw__conv__params.html#a88d6144a8af12904ac92b82aee2d6695">cmsis_nn_dw_conv_params::activation</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a31fa46f17212fbcb65d2cdae06fc08f5">arm_nn_read_q7x4()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aab0b7c6b993dc249651b77c675c7a9b4">cmsis_nn_dw_conv_params::input_offset</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a6058fcacc55ccf2f3e7049abcd26a7b2">cmsis_nn_dw_conv_params::output_offset</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a26ce1b5e6d00c24781628288e7cf286a">cmsis_nn_dw_conv_params::padding</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#ad0553c750d65a8501fb086c7a662bc41">cmsis_nn_dw_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gabca128df92f9486ebdac7eee3178c0fd">arm_depthwise_conv_wrapper_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="ga3e5c3370f6f70ac51d559a53290bb45d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_conv_s16 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *&#160;</td>
          <td class="paramname"><em>dw_conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q15_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int64_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context (e.g. temporary buffer). Check the function definition file to see if an additional buffer is required. Optional function {API}_get_buffer_size() provides the buffer size if an additional buffer is required. exists if additional memory is. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dw_conv_params</td><td>Depthwise convolution parameters (e.g. strides, dilations, pads,...) conv_params-&gt;input_offset : Not used conv_params-&gt;output_offset : Not used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] Batch argument N is not used. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [1, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Bias data pointer. Data type: int64 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int16 </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code></dd></dl>
<ul>
<li>Supported framework: TensorFlow Lite</li>
<li>q15 is used as data type eventhough it is s16 data. It is done so to be consistent with existing APIs. </li>
</ul>

<p>References <a class="el" href="structcmsis__nn__dw__conv__params.html#a88d6144a8af12904ac92b82aee2d6695">cmsis_nn_dw_conv_params::activation</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aa613968e07c396755c2a6def8ecded79">cmsis_nn_dw_conv_params::ch_mult</a>, <a class="el" href="group__NNConv.html#gadde7c225c29269334cd821ead685361d">depthwise_conv_s16_generic_s16()</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aa2e4f79bfb4788293f3b2cb5cf521ad5">cmsis_nn_dw_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a26ce1b5e6d00c24781628288e7cf286a">cmsis_nn_dw_conv_params::padding</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#ad0553c750d65a8501fb086c7a662bc41">cmsis_nn_dw_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

</div>
</div>
<a class="anchor" id="gad8a6832cf0c8a8862fc8cd9ec95f40a9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_conv_s8 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *&#160;</td>
          <td class="paramname"><em>dw_conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context (e.g. temporary buffer). Check the function definition file to see if an additional buffer is required. Optional function {API}_get_buffer_size() provides the buffer size if an additional buffer is required. exists if additional memory is. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dw_conv_params</td><td>Depthwise convolution parameters (e.g. strides, dilations, pads,...) dw_conv_params-&gt;dilation is not used. Range of dw_conv_params-&gt;input_offset : [-127, 128] Range of dw_conv_params-&gt;input_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [N, H, W, C_IN] Batch argument N is not used. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [1, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Bias data pointer. Data type: int32 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [N, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int8 </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code></dd></dl>
<ul>
<li>Supported framework: TensorFlow Lite</li>
<li>q7 is used as data type eventhough it is s8 data. It is done so to be consistent with existing APIs. </li>
</ul>

<p>References <a class="el" href="structcmsis__nn__dw__conv__params.html#a88d6144a8af12904ac92b82aee2d6695">cmsis_nn_dw_conv_params::activation</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aa613968e07c396755c2a6def8ecded79">cmsis_nn_dw_conv_params::ch_mult</a>, <a class="el" href="group__NNConv.html#ga8a0fd229483032bfe41183843e17f8f6">depthwise_conv_s8_generic()</a>, <a class="el" href="group__NNConv.html#ga06d7783f6788faad5165fd0ae583bc59">depthwise_conv_s8_mult_4()</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aa2e4f79bfb4788293f3b2cb5cf521ad5">cmsis_nn_dw_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aab0b7c6b993dc249651b77c675c7a9b4">cmsis_nn_dw_conv_params::input_offset</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a6058fcacc55ccf2f3e7049abcd26a7b2">cmsis_nn_dw_conv_params::output_offset</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a26ce1b5e6d00c24781628288e7cf286a">cmsis_nn_dw_conv_params::padding</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#ad0553c750d65a8501fb086c7a662bc41">cmsis_nn_dw_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gab9dc832c407c0fe0f4d6fbb063e85e97">arm_depthwise_conv_s8_opt()</a>, and <a class="el" href="group__NNConv.html#gabca128df92f9486ebdac7eee3178c0fd">arm_depthwise_conv_wrapper_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="gab9dc832c407c0fe0f4d6fbb063e85e97"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_conv_s8_opt </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *&#160;</td>
          <td class="paramname"><em>dw_conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>The function returns one of the following <code>ARM_MATH_SIZE_MISMATCH</code> - input channel != output channel or ch_mult != 1 <code>ARM_MATH_SUCCESS</code> - Successful operation</dd></dl>
<dl class="section note"><dt>Note</dt><dd>If number of channels is not a multiple of 4, upto 3 elements outside the boundary will be read out for the following if MVE optimizations(Arm Helium Technology) are used.<ul>
<li>Output shift</li>
<li>Output multiplier</li>
<li>Output bias</li>
<li>kernel</li>
</ul>
</dd></dl>
<ul>
<li>Supported framework: TensorFlow Lite</li>
<li>The following constrains on the arguments apply<ol type="1">
<li>Number of input channel equals number of output channels or ch_mult equals 1</li>
</ol>
</li>
<li>q7 is used as data type eventhough it is s8 data. It is done so to be consistent with existing APIs.</li>
<li>Reccomended when number of channels is 4 or greater. </li>
</ul>

<p>References <a class="el" href="structcmsis__nn__dw__conv__params.html#a88d6144a8af12904ac92b82aee2d6695">cmsis_nn_dw_conv_params::activation</a>, <a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9">arm_depthwise_conv_s8()</a>, <a class="el" href="group__NNConv.html#ga0ee6e4c1a521657c35477ae0daf1c842">arm_depthwise_conv_s8_opt_get_buffer_size()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a085459f6280c8f586ddd64998dece532">arm_memcpy_q7()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a7018797f0abd9595cc0dc0aedbb5f17e">arm_memset_q7()</a>, <a class="el" href="group__NNBasicMath.html#gaf7e914e84c2fa6bcf9b0727b8c46c250">arm_nn_depthwise_conv_nt_t_padded_s8()</a>, <a class="el" href="group__NNBasicMath.html#ga7f74841dd08196377cc29ce98deb2c12">arm_nn_depthwise_conv_nt_t_s8()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a9d505dfe68f4486c2327df8a857a89ad">arm_nn_read_q15x2()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a31fa46f17212fbcb65d2cdae06fc08f5">arm_nn_read_q7x4()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="group__nndata__convert.html#gab2d48529ae05b350a015f8f1e6596a31">arm_q7_to_q15_with_offset()</a>, <a class="el" href="structcmsis__nn__context.html#a3e613ad30f12df59853a1b3565212702">cmsis_nn_context::buf</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aab0b7c6b993dc249651b77c675c7a9b4">cmsis_nn_dw_conv_params::input_offset</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="structcmsis__nn__activation.html#a5fefc67d8979f6a9efe36330b9ba81cf">cmsis_nn_activation::max</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, <a class="el" href="structcmsis__nn__activation.html#a88a2ecd4bda8cd5f339c826df578585a">cmsis_nn_activation::min</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a33b4a56acc8ffaa077f7db31b001e5bd">cmsis_nn_per_channel_quant_params::multiplier</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a6058fcacc55ccf2f3e7049abcd26a7b2">cmsis_nn_dw_conv_params::output_offset</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a26ce1b5e6d00c24781628288e7cf286a">cmsis_nn_dw_conv_params::padding</a>, <a class="el" href="structcmsis__nn__per__channel__quant__params.html#a281dfde55f7a87b39a4a2c2c0362c813">cmsis_nn_per_channel_quant_params::shift</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#ad0553c750d65a8501fb086c7a662bc41">cmsis_nn_dw_conv_params::stride</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gabca128df92f9486ebdac7eee3178c0fd">arm_depthwise_conv_wrapper_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="ga0ee6e4c1a521657c35477ae0daf1c842"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_depthwise_conv_s8_opt_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [1, H, W, C_IN] Batch argument N is not used. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [1, H, W, C_OUT] </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns required buffer size in bytes </dd></dl>

<p>References <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gab9dc832c407c0fe0f4d6fbb063e85e97">arm_depthwise_conv_s8_opt()</a>, and <a class="el" href="group__NNConv.html#ga100b66e41b8fdf1eeb0c108bca6b6deb">arm_depthwise_conv_wrapper_s8_get_buffer_size()</a>.</p>

</div>
</div>
<a class="anchor" id="ga064686bdb2a6e52110b302255dad6009"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_conv_u8_basic_ver1 </td>
          <td>(</td>
          <td class="paramtype">const uint8_t *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint8_t *&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int16_t&#160;</td>
          <td class="paramname"><em>ch_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int16_t&#160;</td>
          <td class="paramname"><em>pad_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int16_t&#160;</td>
          <td class="paramname"><em>pad_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int16_t&#160;</td>
          <td class="paramname"><em>dilation_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int16_t&#160;</td>
          <td class="paramname"><em>dilation_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>filter_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>output_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>output_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_min</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_max</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_mult</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>uint8 depthwise convolution function with asymmetric quantization Unless specified otherwise, arguments are mandatory.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_x</td><td>Width of input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_y</td><td>Height of input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_ch</td><td>Channels in input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">kernel</td><td>Pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">kernel_x</td><td>Width of kernel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">kernel_y</td><td>Height of kernel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_mult</td><td>Number of channel multiplier </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pad_x</td><td>Padding sizes x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pad_y</td><td>Padding sizes y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_x</td><td>Convolution stride along the width </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_y</td><td>Convolution stride along the height </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dilation_x</td><td>Dilation along width. Not used and intended for future enhancement. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dilation_y</td><td>Dilation along height. Not used and intended for future enhancement. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>Pointer to optional bias values. If no bias is available, NULL is expected </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_offset</td><td>Input tensor zero offset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_offset</td><td>Kernel tensor zero offset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_offset</td><td>Output tensor zero offset </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">output</td><td>Pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_x</td><td>Width of output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_y</td><td>Height of output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_activation_min</td><td>Minimum value to clamp the output to. Range : {0, 255} </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_activation_max</td><td>Minimum value to clamp the output to. Range : {0, 255} </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_shift</td><td>Amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_mult</td><td>Output multiplier for requantization </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns one of the following <code>ARM_MATH_SIZE_MISMATCH</code> - Not supported dimension of tensors <code>ARM_MATH_SUCCESS</code> - Successful operation <code>ARM_MATH_ARGUMENT_ERROR</code> - Implementation not available </dd></dl>

<p>References <a class="el" href="group__NNConv.html#gab98fd934700dff7667131744c8972d91">depthwise_conv_u8_generic()</a>, and <a class="el" href="group__NNConv.html#ga4c54b5bdb38fc20c2167bdfa289f1a2b">depthwise_conv_u8_mult_4()</a>.</p>

</div>
</div>
<a class="anchor" id="gabca128df92f9486ebdac7eee3178c0fd"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_conv_wrapper_s8 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__context.html">cmsis_nn_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *&#160;</td>
          <td class="paramname"><em>dw_conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__per__channel__quant__params.html">cmsis_nn_per_channel_quant_params</a> *&#160;</td>
          <td class="paramname"><em>quant_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>filter_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>bias_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>Function context (e.g. temporary buffer). Check the function definition file to see if an additional buffer is required. Optional function {API}_get_buffer_size() provides the buffer size if required. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dw_conv_params</td><td>Depthwise convolution parameters (e.g. strides, dilations, pads,...) dw_conv_params-&gt;dilation is not used. Range of dw_conv_params-&gt;input_offset : [-127, 128] Range of dw_conv_params-&gt;output_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">quant_params</td><td>Per-channel quantization info. It contains the multiplier and shift values to be applied to each output channel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [H, W, C_IN] Batch argument N is not used and assumed to be 1. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_data</td><td>Input (activation) data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [1, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_data</td><td>Filter data pointer. Data type: int8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_dims</td><td>Bias tensor dimensions. Format: [C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_data</td><td>Bias data pointer. Data type: int32 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [1, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">output_data</td><td>Output data pointer. Data type: int8 </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns <code>ARM_MATH_SUCCESS</code> - Successful completion.</dd></dl>
<ul>
<li>Supported framework: TensorFlow Lite</li>
<li>Picks one of the the following functions<ol type="1">
<li><a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9" title="Basic s8 depthwise convolution function that doesn&#39;t have any constraints on the input dimensions...">arm_depthwise_conv_s8()</a></li>
<li><a class="el" href="group__NNConv.html#ga558337f134d84dac2c312c5175bd67de" title="Optimized s8 depthwise convolution function for 3x3 kernel size with some constraints on the input ar...">arm_depthwise_conv_3x3_s8()</a> - Cortex-M CPUs with DSP extension only</li>
<li><a class="el" href="group__NNConv.html#gab9dc832c407c0fe0f4d6fbb063e85e97" title="Optimized s8 depthwise convolution function with constraint that in_channel equals out_channel...">arm_depthwise_conv_s8_opt()</a></li>
</ol>
</li>
<li>q7 is used as data type eventhough it is s8 data. It is done so to be consistent with existing APIs.</li>
<li>Check details of <a class="el" href="group__NNConv.html#gab9dc832c407c0fe0f4d6fbb063e85e97" title="Optimized s8 depthwise convolution function with constraint that in_channel equals out_channel...">arm_depthwise_conv_s8_opt()</a> for potential data that can be accessed outside of the boundary. </li>
</ul>

<p>References <a class="el" href="group__NNConv.html#ga558337f134d84dac2c312c5175bd67de">arm_depthwise_conv_3x3_s8()</a>, <a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9">arm_depthwise_conv_s8()</a>, <a class="el" href="group__NNConv.html#gab9dc832c407c0fe0f4d6fbb063e85e97">arm_depthwise_conv_s8_opt()</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aa613968e07c396755c2a6def8ecded79">cmsis_nn_dw_conv_params::ch_mult</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aa2e4f79bfb4788293f3b2cb5cf521ad5">cmsis_nn_dw_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a471946ee336572a5a96eeb0894e6005a">cmsis_nn_dims::h</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#a26ce1b5e6d00c24781628288e7cf286a">cmsis_nn_dw_conv_params::padding</a>, <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>, and <a class="el" href="structcmsis__nn__dims.html#a30b8961cc2f84ff79c399c31ff3563c0">cmsis_nn_dims::w</a>.</p>

</div>
</div>
<a class="anchor" id="ga100b66e41b8fdf1eeb0c108bca6b6deb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32_t arm_depthwise_conv_wrapper_s8_get_buffer_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dw__conv__params.html">cmsis_nn_dw_conv_params</a> *&#160;</td>
          <td class="paramname"><em>dw_conv_params</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>input_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>filter_dims</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structcmsis__nn__dims.html">cmsis_nn_dims</a> *&#160;</td>
          <td class="paramname"><em>output_dims</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dw_conv_params</td><td>Depthwise convolution parameters (e.g. strides, dilations, pads,...) dw_conv_params-&gt;dilation is not used. Range of dw_conv_params-&gt;input_offset : [-127, 128] Range of dw_conv_params-&gt;input_offset : [-128, 127] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_dims</td><td>Input (activation) tensor dimensions. Format: [H, W, C_IN] Batch argument N is not used and assumed to be 1. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">filter_dims</td><td>Filter tensor dimensions. Format: [1, H, W, C_OUT] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_dims</td><td>Output tensor dimensions. Format: [1, H, W, C_OUT] </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Size of additional memory required for optimizations in bytes. </dd></dl>

<p>References <a class="el" href="group__NNConv.html#ga0ee6e4c1a521657c35477ae0daf1c842">arm_depthwise_conv_s8_opt_get_buffer_size()</a>, <a class="el" href="structcmsis__nn__dims.html#ac9c268ab90554ab8ea2c3d76ecf1ed6c">cmsis_nn_dims::c</a>, <a class="el" href="structcmsis__nn__dw__conv__params.html#aa2e4f79bfb4788293f3b2cb5cf521ad5">cmsis_nn_dw_conv_params::dilation</a>, <a class="el" href="structcmsis__nn__tile.html#a13c54be71aa552c2bc76d12032a3d092">cmsis_nn_tile::h</a>, <a class="el" href="structcmsis__nn__dims.html#a907a0be31e2e3de73df89b1327724555">cmsis_nn_dims::n</a>, and <a class="el" href="structcmsis__nn__tile.html#a9f99b4e1164c76f4ed6b32648d454283">cmsis_nn_tile::w</a>.</p>

</div>
</div>
<a class="anchor" id="gad3d21b3bc6dbd6f3b97d01104349cb0a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_separable_conv_HWC_q7 </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in</td><td>input tensor dimension </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel</td><td>filter kernel size </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding</td><td>padding sizes </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>convolution stride </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out</td><td>output tensor dimension </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p><b>Buffer size:</b></p>
<p>bufferA size: 2*ch_im_in*dim_kernel*dim_kernel</p>
<p>bufferB size: 0</p>
<p><b>Input dimension constraints:</b></p>
<p>ch_im_in equals ch_im_out</p>
<p>Implementation: There are 3 nested loop here: Inner loop: calculate each output value with MAC instruction over an accumulator Mid loop: loop over different output channel Outer loop: loop over different output (x, y) </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#a31fa46f17212fbcb65d2cdae06fc08f5">arm_nn_read_q7x4()</a>, <a class="el" href="unionarm__nnword.html#ac7cff6480a8e29d95f29b73cb1267249">arm_nnword::bytes</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>, and <a class="el" href="unionarm__nnword.html#a35c7b2ae25e35e0ddcd9ec0a1a6f8d18">arm_nnword::word</a>.</p>

</div>
</div>
<a class="anchor" id="ga32ac508c5467813a84f74f96655dc697"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">arm_status arm_depthwise_separable_conv_HWC_q7_nonsquare </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>Im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_in_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>wt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>padding_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>bias_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>out_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>Im_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dim_im_out_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q15_t *&#160;</td>
          <td class="paramname"><em>bufferA</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>bufferB</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Im_in</td><td>pointer to input tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_x</td><td>input tensor dimension x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_in_y</td><td>input tensor dimension y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_in</td><td>number of input tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">wt</td><td>pointer to kernel weights </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ch_im_out</td><td>number of filters, i.e., output tensor channels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_x</td><td>filter kernel size x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_kernel_y</td><td>filter kernel size y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_x</td><td>padding sizes x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">padding_y</td><td>padding sizes y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_x</td><td>convolution stride x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride_y</td><td>convolution stride y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias</td><td>pointer to bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bias_shift</td><td>amount of left-shift for bias </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">out_shift</td><td>amount of right-shift for output </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">Im_out</td><td>pointer to output tensor </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_x</td><td>output tensor dimension x </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dim_im_out_y</td><td>output tensor dimension y </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferA</td><td>pointer to buffer space for input </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bufferB</td><td>pointer to buffer space for output </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.</dd></dl>
<p>This function is the version with full list of optimization tricks, but with some constraints: ch_im_in is equal to ch_im_out </p>

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#a31fa46f17212fbcb65d2cdae06fc08f5">arm_nn_read_q7x4()</a>, <a class="el" href="unionarm__nnword.html#ac7cff6480a8e29d95f29b73cb1267249">arm_nnword::bytes</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#a4cbd428a2b4a4f6b2a6e4219520c7ce0">NN_ROUND</a>, and <a class="el" href="unionarm__nnword.html#a35c7b2ae25e35e0ddcd9ec0a1a6f8d18">arm_nnword::word</a>.</p>

</div>
</div>
<a class="anchor" id="gadde7c225c29269334cd821ead685361d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void depthwise_conv_s16_generic_s16 </td>
          <td>(</td>
          <td class="paramtype">const int16_t *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_batches</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int8_t *&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>pad_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>pad_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int64_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int16_t *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>output_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>output_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>output_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>output_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_min</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_max</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dilation_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dilation_y</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#aa03e369b608572b80a4e56e8298a21c0">arm_nn_requantize_s64()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#a19343832dbe881d527496171f69dc0c3">REDUCE_MULTIPLIER</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga3e5c3370f6f70ac51d559a53290bb45d">arm_depthwise_conv_s16()</a>.</p>

</div>
</div>
<a class="anchor" id="ga8a0fd229483032bfe41183843e17f8f6"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void depthwise_conv_s8_generic </td>
          <td>(</td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_batches</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>input_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const q7_t *&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>output_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>ch_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>pad_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>pad_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">q7_t *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>output_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>output_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>output_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>output_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_min</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_max</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dilation_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint16_t&#160;</td>
          <td class="paramname"><em>dilation_y</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9">arm_depthwise_conv_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="ga06d7783f6788faad5165fd0ae583bc59"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void depthwise_conv_s8_mult_4 </td>
          <td>(</td>
          <td class="paramtype">const int8_t *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int8_t *&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>ch_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>pad_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>pad_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int8_t *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>output_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>output_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_min</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_max</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#gad8a6832cf0c8a8862fc8cd9ec95f40a9">arm_depthwise_conv_s8()</a>.</p>

</div>
</div>
<a class="anchor" id="gab98fd934700dff7667131744c8972d91"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void depthwise_conv_u8_generic </td>
          <td>(</td>
          <td class="paramtype">const uint8_t *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint8_t *&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>ch_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>pad_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>pad_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>filter_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_min</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_max</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga064686bdb2a6e52110b302255dad6009">arm_depthwise_conv_u8_basic_ver1()</a>.</p>

</div>
</div>
<a class="anchor" id="ga4c54b5bdb38fc20c2167bdfa289f1a2b"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void depthwise_conv_u8_mult_4 </td>
          <td>(</td>
          <td class="paramtype">const uint8_t *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const uint8_t *&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_ch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>ch_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>kernel_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>kernel_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>pad_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>pad_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t *&#160;</td>
          <td class="paramname"><em>bias</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_shift</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_mult</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>input_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>filter_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_min</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int32_t&#160;</td>
          <td class="paramname"><em>output_activation_max</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>References <a class="el" href="arm__nnsupportfunctions_8h.html#a6a13b7a567485da5fc7f0d311318886d">arm_nn_requantize()</a>, <a class="el" href="arm__nnsupportfunctions_8h.html#ad935f1ff1a50822e317bdb321ce991ad">MAX</a>, and <a class="el" href="arm__nnsupportfunctions_8h.html#adcd021ac91d43a62b2cdecf9a5b971a7">MIN</a>.</p>

<p>Referenced by <a class="el" href="group__NNConv.html#ga064686bdb2a6e52110b302255dad6009">arm_depthwise_conv_u8_basic_ver1()</a>.</p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">
      <script type="text/javascript">
        <!--
        writeFooter.call(this);
        //-->
      </script>    
    </li>
  </ul>
</div>
</body>
</html>
